#include<iostream>

#include<stdio.h>

#include<unistd.h>

#include<signal.h>

#include <sys/types.h>

#include <sys/wait.h>

using namespace std;

// void my_handler(int sign)
// {
//     cout << "捕捉到一个信号：" << sign << endl;
//     int ret = alarm(5);
//     cout << "上次闹钟剩余时间：" << ret << endl;
// }

int main()
{
    // signal(SIGALRM, my_handler);

    // int ret = alarm(5);
    // cout << ret << endl;
    // ret = alarm(0);
    // cout << ret << endl;
    // sleep(1);

    // while(1)
    // {
    //     cout << "hello linux. PID：" << getpid() << endl;
    //     sleep(1);
    // }

    int ret = fork();

    if(ret == 0)
    {
        while(1)
        {
            cout << "我是子进程，PID是：" << getpid() << endl;
            sleep(1);
        }
    }
    else if(ret > 0)
    {
        int st = 0;
        wait(&st);
        if(WIFEXITED(st))
        {
            cout << "进程正常退出，退出状态：" << WEXITSTATUS(st) << endl;
        }
        else
        {
            cout << "进程异常退出，异常信号：" << WTERMSIG(st) << "。core dump 状态：" << ((st >> 7) & 1) << endl;
        }
    }

    return 0;
}